#ifndef __OBSERVER_H__
#define __OBSERVER_H__

#include "math/vector.h"

#include <boost/serialization/nvp.hpp>
#include <boost/serialization/version.hpp>

namespace Sirat {

namespace Common {

class Observer {
public:
	Observer(const Math::Vector&,const Math::Vector&);
	Observer();
	Observer(const Observer& _observer);
	~Observer();
	
	Math::Vector get_position() const;
	Math::Vector get_up() const;
	
	void set_position(const Math::Vector&);
	void set_up(const Math::Vector&);
	
	Observer& operator=(const Observer& _observer);
	
private:
	friend class boost::serialization::access;
	template<class Archive> void serialize(Archive&, const unsigned int);
	
	Math::Vector position;
	Math::Vector up;
};

template<class Archive> void Observer::serialize(Archive& ar, const unsigned int /* file_version */){
	ar & BOOST_SERIALIZATION_NVP(position)
		& BOOST_SERIALIZATION_NVP(up);          
}

}

}

#endif
